//package com.hly.tool.ftp;
//
///**
// * Created with IntelliJ IDEA.
// * Copyright@ Apache Open Source Organization
// * SFTP 上传 下载文件
// *
// * @Auther: HLY
// * @Date: 2022-09-29-10:57
// * @Description:
// */
//public class SFTPUtil
//{
//
//
//
//    private ChannelSftp sftp;
//    private Session session;
//
//    //SFTP 登录用户名
//    private String username;
//
//    @Autowired
//    private CUS_Config cusConfig;
//
//
//    public ChannelSftp getSftp()
//    {
//        return sftp;
//    }
//
//    public void setSftp(ChannelSftp sftp)
//    {
//        this.sftp = sftp;
//    }
//
//    public Session getSession()
//    {
//        return session;
//    }
//
//    public void setSession(Session session)
//    {
//        this.session = session;
//    }
//
//    public String getUsername()
//    {
//        return username;
//    }
//
//    public void setUsername(String username)
//    {
//        this.username = username;
//    }
//
//    public String getPassword()
//    {
//        return password;
//    }
//
//    public void setPassword(String password)
//    {
//        this.password = password;
//    }
//
//    public String getPrivateKey()
//    {
//        return privateKey;
//    }
//
//    public void setPrivateKey(String privateKey)
//    {
//        this.privateKey = privateKey;
//    }
//
//    public String getHost()
//    {
//        return host;
//    }
//
//    public void setHost(String host)
//    {
//        this.host = host;
//    }
//
//    public int getPort()
//    {
//        return port;
//    }
//
//    public void setPort(int port)
//    {
//        this.port = port;
//    }
//
//    //SFTP 登录密码
//    private String password;
//
//    //私钥
//    private String privateKey;
//
//    //FTP 服务器地址IP地址
//    private String host;
//
//    //SFTP 端口
//    private int port;
//
//
//    /**
//     * 构造基于密码认证的sftp对象
//     */
//    public SFTPUtil(String username, String password, String host, int port)
//    {
//        this.username = username;
//        this.password = password;
//        this.host = host;
//        this.port = port;
//    }
//
//    /**
//     * 构造基于秘钥认证的sftp对象
//     */
//    public SFTPUtil(String username, String host, int port, String privateKey)
//    {
//        this.username = username;
//        this.host = host;
//        this.port = port;
//        this.privateKey = privateKey;
//    }
//
//    public SFTPUtil()
//    {
//    }
//
//    /**
//     * 连接sftp服务器
//     */
//    public void login()
//    {
//        try
//        {
//            JSch jsch = new JSch();
//            if (privateKey != null)
//            {
//                jsch.addIdentity(privateKey);// 设置私钥
//            }
//            session = jsch.getSession(username, host, port);
//            if (password != null)
//            {
//                session.setPassword(password);
//            }
//            Properties config = new Properties();
//            config.put("StrictHostKeyChecking", "no");
//            session.setConfig(config);
//            session.connect();
//            Channel channel = session.openChannel("sftp");
//            channel.connect();
//            sftp = (ChannelSftp) channel;
//        } catch (JSchException e)
//        {
//            e.printStackTrace();
//
//        }
//
//    }
//
//    /**
//     * 关闭连接 server
//     */
//
//    public void logout()
//    {
//        if (sftp != null)
//        {
//            if (sftp.isConnected())
//            {
//                sftp.disconnect();
//            }
//        }
//        if (session != null)
//        {
//            if (session.isConnected())
//            {
//                session.disconnect();
//
//            }
//        }
//    }
//
//    /**
//     * 将输入流的数据上传到sftp作为文件。文件完整路径=basePath+directory
//     *
//     * @param basePath     服务器的基础路径
//     * @param directory    上传到该目录
//     * @param sftpFileName sftp端文件名
//     * @param input        输入流
//     */
//    public void upload(String basePath, String directory, String sftpFileName, InputStream input) throws SftpException
//    {
//        try
//        {
//            sftp.cd(basePath);
//            sftp.cd(directory);
//        } catch (SftpException e)
//        {
//
//            //目录不存在，则创建文件夹
//            String[] dirs = directory.split("/");
//            String tempPath = basePath;
//            for (String dir : dirs)
//            {
//                if (null == dir || "".equals(dir)) continue;
//                tempPath += "/" + dir;
//                try
//                {
//                    sftp.cd(tempPath);
//                } catch (SftpException ex)
//                {
//                    sftp.mkdir(tempPath);
//                    sftp.cd(tempPath);
//                }
//            }
//        }
//        sftp.put(input, sftpFileName); //上传文件
//    }
//
//    /**
//     * 下载文件。
//     *
//     * @param directory    下载目录
//     * @param downloadFile 下载的文件
//     * @param saveFile     存在本地的路径
//     */
//    public void download(String directory, String downloadFile, String saveFile) throws SftpException, FileNotFoundException
//    {
//        if (directory != null && !"".equals(directory))
//        {
//            sftp.cd(directory);
//        }
//
//        File file = new File(saveFile);
//        sftp.get(downloadFile, new FileOutputStream(file));
//    }
//
//    /**
//     * 下载文件
//     *
//     * @param directory    下载目录
//     * @param downloadFile 下载的文件名
//     * @return 字节数组
//     */
//    private byte[] download(String directory, String downloadFile) throws SftpException, IOException
//    {
//        if (directory != null && !"".equals(directory))
//        {
//            sftp.cd(directory);
//        }
//        InputStream is = sftp.get(downloadFile);
//        byte[] fileData = IOUtils.toByteArray(is);
//        return fileData;
//    }
//
//
//
//
//    /**
//     * 下载单个文件，如果指定文件名，则下载到文件名否则保持原有文件名
//     *
//     * @param remoteFilePath
//     *            远程文件路径 /tmp/xxx.txt || xxx.txt.zip
//     * @param localFilePath
//     *            本地文件路径 如 D:\\xxx.txt
//     * @return 下载的文件
//     */
//    public File downloadFile(String remoteFilePath, String localFilePath){
//        logger.info("downloadFile remoteFilePath: "+remoteFilePath);
//        logger.info("downloadFile localFilePath: "+localFilePath);
//
//        String remoteFileName = "";
//        logger.info("downloadFile remoteFileName: "+remoteFileName);
//
//        // 远端目录确定以 / 作为目录格式
//        String rFileSeparator = "/";
//        logger.info("downloadFile rFileSeparator: "+rFileSeparator);
//
//        int rDirNameSepIndex = remoteFilePath.lastIndexOf(rFileSeparator) + 1;
//        logger.info(" rDirNameSepIndex: "+rDirNameSepIndex);
//
//        String rDir = remoteFilePath.substring(0, rDirNameSepIndex);
//        logger.info(" rDir: "+rDir);
//
//        remoteFileName = remoteFilePath.substring(rDirNameSepIndex);
//        logger.info(" remoteFileName: "+remoteFileName);
//
//        if(localFilePath.endsWith(File.separator)){
//            localFilePath = localFilePath
//                    + (localFilePath.endsWith(File.separator) ? remoteFileName : "/" + remoteFileName);
//        }
//        logger.info(" localFilePath: "+localFilePath);
//
//        File file = null;
//        logger.info(" file: "+file);
//
//        OutputStream output = null;
//        logger.info(" output: "+output);
//
//        try{
//            file = new File(localFilePath);
//            if(file.exists()){
//                file.delete();
//            }
//            file.createNewFile();
//
//            logger.info(" file: "+file);
//
//            sftp.cd(rDir);
//            logger.info("  sftp.cd(rDir): "+rDir);
//
//            output = new FileOutputStream(file);
//            logger.info("  output : "+output);
//
//            sftp.get(remoteFileName, output);
//            logger.info("  sftp.get(remoteFileName, output) : "+remoteFileName +"   "+output);
//
//        }catch(Exception e){
//            logger.error("e : "+e);
//        }finally{
//            if(output != null){
//                try{
//                    output.close();
//                }catch(IOException e){
//                    e.printStackTrace();
//                }
//            }
//        }
//
//        return file;
//    }
//
//    /**
//     * 删除文件
//     *
//     * @param directory  要删除文件所在目录
//     * @param deleteFile 要删除的文件
//     */
//
//    public void delete(String directory, String deleteFile) throws SftpException
//    {
//        sftp.cd(directory);
//        sftp.rm(deleteFile);
//    }
//
//    /**
//     * 列出目录下的文件
//     *
//     * @param directory 要列出的目录
//     */
//    public Vector listFiles(String directory) throws SftpException
//    {
//        return sftp.ls(directory);
//    }
//
//
//
//    /**
//     * sftp 登录
//     *
//     * @return
//     */
//    public CUS_SFTPUtil sftpLogin()
//    {
//
//        //ftp host (ip)
//        String ftpHost = cusConfig.ftpHost;
//        logger.info(" ftpHost : " + ftpHost);
//
//        //ftp port 端口号
//        String ftpPort = cusConfig.ftpPort;
//        int i_ftpPort = Integer.parseInt(cusConfig.ftpPort);
//        logger.info(" ftpPort : " + ftpPort);
//
//        //ftp Username 用户名
//        String ftpUsername = cusConfig.ftpUsername;
//        logger.info(" ftpUsername : " + ftpUsername);
//
//
//        //ftp Password 密码
//        String ftpPassword = cusConfig.ftpPassword;
//        logger.info(" ftpPassword : ****** ");
//
//        this.setHost(ftpHost);
//        this.setPort(i_ftpPort);
//        this.setUsername(ftpUsername);
//        this.setPassword(ftpPassword);
//
//        this.login();
//
//        return this;
//
//    }
//
//
//    /**
//     * sftp 登录
//     *
//     * @return
//     */
//    public CUS_SFTPUtil sftpLogin(String ftpHost,int i_ftpPort,String ftpUsername, String ftpPassword)
//    {
//
//        //ftp host (ip)
//        logger.info(" ftpHost : " + ftpHost);
//
//        //ftp port 端口号
//        logger.info(" i_ftpPort : " + i_ftpPort);
//
//        //ftp Username 用户名
//        logger.info(" ftpUsername : " + ftpUsername);
//
//
//        //ftp Password 密码
//        logger.info(" ftpPassword : ****** ");
//
//        this.setHost(ftpHost);
//        this.setPort(i_ftpPort);
//        this.setUsername(ftpUsername);
//        this.setPassword(ftpPassword);
//
//        this.login();
//
//        return this;
//
//    }
//
//
//    /**
//     * sftp 上载文件
//     *
//     * @param sftp
//     * @param file
//     * @param saveName
//     * @return
//     */
//    public void sdftUpload(CUS_SFTPUtil sftp, File file, String workingpath, String saveName) throws Exception
//    {
//        InputStream is = new FileInputStream(file);
//        sftp.upload("/", workingpath, saveName, is);
//
//        if (is != null)
//        {
//            try
//            {
//                is.close();
//            } catch (IOException e)
//            {
//                logger.error("e : " + ExceptionUtil.getStackTrace(e));
//            }
//        }
//    }
//
//
//
////上传文件测试
//
//    public static void main(String[] args) throws SftpException, IOException
//    {
//        CUS_SFTPUtil sftp = new CUS_SFTPUtil("root", "root", "192.168.71.132", 22);
//        sftp.login();
//        File file = new File("D:\\temp\\out\\ToFtp\\AR-20210823-000001\\AR-20210823-000001.zip");
//        InputStream is = new FileInputStream(file);
//        sftp.upload("/", "sftp_root/供应商数据下发目录/AR-20210823-000001/", "AR-20210823-000001.zip", is);
//        sftp.logout();
//    }
//
//}
//
//
//}
